<template>
  <div>
    <div v-show='visiable'>
      绑定用户
      用户名: <input
      type="text"
      v-model="username"
      @blur="check_username"
    >
      <span>{{username_message}}</span>
      密码: <input
      type="password"
      v-model="password"
    >
      <button @click="bindUser">绑定</button>
    </div>
  </div>
</template>
<script>
import axios from 'axios'
  export default {
    data() {
      return {
        visiable: false, // 绑定用户窗口
        uid: '', // weibo_uid
        username: '',
        password: '',
        username_message: '',
        username_error: false
      }
    },
    mounted() {
      this.getCode()
    },
    methods: {
      // 2.判断用户名是否合法
      check_username() {
        console.log('判断用户名')
        console.log(this.username == '')
        var reg = new RegExp(/^[a-zA-Z0-9_-]{3,16}$/); //字符串正则表达式 4到14位（字母，数字，下划线，减号）
        if (this.username == '') {
          this.username_message = '用户名不能为空'
          this.username_error = true
          return false
        }
        if (!reg.test(this.username)) {
          this.username_message = '用户名格式不正确'
          this.username_error = true
          return false
        } else {
          // 去后端检查用户名使用数量
          axios.post('http://127.0.0.1:8000/user/count/',{ type: 'username', data: this.username }).then((res) => {
            console.log(res.data)
            if (res.data.data.count > 0) {
              this.username_message = '用户名已存在, 请输入密码'
              this.username_error = false
            } else {
              this.username_message = '用户名可用, 将创建新用户,请输入密码'
              this.username_error = false
            }
          })
        }
      },
      // 1.1当页面被挂载时就自动调用，通过url获取微博的code，发送code给django端
      // 1.2 如果已经绑定，返回 type='0',登录成功，直接跳转到首页
      // 1.3 如果未绑定，返回type='1'，显示绑定用户的页面
      getCode() {
        // 获取url中的code 信息，code信息是微博端返回的
        // 当前url 是  http://127.0.0.1:8888/oauth/callback/?code=424db5805abb50ed5e0ba97325f54d0f
        let code = this.$route.query.code
        // 给后端发送code
        let params = { code: code }
        axios.post('http://127.0.0.1:8000/oauth/weibo/callback/',{'code':params}).then((resp) => {
            console.log()
          // code: 0
          // msg: "授权成功"
          // data: {type: "1", uid: "7410919278"}
          // 如果type=0代表以前已经绑定过，直接登录成功
          if (resp.data.data.type == '0') {
              console.log(1)
            // code: 0
            // msg: "登录成功"
            // data: {
            // authenticated: "true"
            // email: ""
            // id: 1
            // name: "admin"
            // role: null
            // token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTk3OTAwNTcyLCJlbWFpbCI6IiIsIm9yaWdfaWF0IjoxNTk3ODE0MTcyfQ.aQT7GSR_xQBPMlB4_k8-zTHnx0ow3OC2KHa3C8MgilY"
            // type: "0"
            // username: "admin"}
            let res = resp.data
            localStorage.setItem('username', res.username)
            // localStorage.setItem('img', res.img)
            localStorage.setItem('token', res.token)
            localStorage.setItem('uid', res.id)
            this.login_username = res.username
            this.opened = false
            // alert(res.message)
            this.$router.push('/')  // 跳转到首页


          }
          // 如果用户·没有绑定过，显示绑定页面
          if (resp.data.data.type == '1') {
            this.visiable = true
            this.uid = resp.data.data.uid
            console.log(1)
          }
        })
      },


      // 3.绑定微博用户与本地用户
      bindUser() {
        if(this.username_error){
          return
        }
        // 发送  用户名, 密码, weibo_uid 到后端接口, 进行绑定

        axios.post('http://127.0.0.1:8000/oauth/weibo/binduser/',
        { 'username': this.username, 'password': this.password, 'weibo_uid': this.uid }).then((resp) => {
          console.log(resp)
          let res = resp.data
          localStorage.setItem('username', res.username)
          // localStorage.setItem('img', res.img)
          localStorage.setItem('token', res.token)
          localStorage.setItem('uid', res.id)
          this.login_username = res.username
          this.opened = false
          // alert(res.message)
          this.$router.push('/')
        })
      }
    }
  }
</script>
